I denne delen finner du et sammendrag av XML-funksjoner og -konvensjoner i oversiktlig format.
Deler i et XML-dokument
Et XML-dokument består av følgende deler i gitt rekkefølge:
1. XML-deklarasjon (valgfri, men absolutt anbefalt)
2. DOCTYPE-deklarasjon og DTD (valgfri), inkludert kommentarer, behandlingsinstruksjoner og entitetsreferanser
3. XML-elementer (og deres attributter), kommentarer, behandlingsinstruksjoner og entitetsreferanser
XML-deklarasjon
En eventuell XML-deklarasjon må alltid stå som den første linjen i et XML-dokument. Den angir hvilken XML-versjon dokumentet følger, og om filen inneholder referanser til andre filer. Eksempel:
<?xml version="1.0" standalone="no"?>DOCTYPE-deklarasjon (inkludert DTD)
DOCTYPE-deklarasjonen, som spesifiserer dokumentets DTD, kommer etter XML-deklarasjonen og før startkoden i rotelementet. Alle DTD-er kan bestå av to deler: eksternt og internt delsett. Hvis et dokument bare har et eksternt delsett, ser det slik ut:
<?xml version="1.0" standalone="no">Et dokument som bare har et internt delsett, ser slik ut:
<?xml version="1.0" standalone="yes">Hvis et dokument både har et eksternt og internt delsett, ser det slik ut:
<?xml version="1.0" standalone="no">Elementer
Et element består av en startkode (<elementnavn>), innhold og en sluttkode (</elementnavn>):
<elementnavn>Her kommer innholdet.</elementnavn>Ett unntak er en tom kode, som kan være én enkeltkode med en skråstrek før den avsluttende vinkelparentesen >:
<tomKode/>Alle elementer må nestes på riktig måte. Det vil si at elementet du åpnet sist, må avsluttes med en sluttkode før eventuelle andre koder avsluttes. I dette eksempelet ser du en linje som ville ha vært ugyldig i et XML-dokument, fordi <kode2> blir ikke avsluttet før <kode1>:
<kode1><kode2>Her kommer innholdet.</kode1></kode2>Alle XML-dokumenter må ha et rotelement som inneholder alle de andre elementene i dokumentet.
Det skilles mellom store og små bokstaver i elementnavn. Det første tegnet i navnet på et element må være en bokstav eller en understreking (_). Resten av tegnene i navnet kan bestå av bokstaver, understrekinger, tall, bindestreker og punktum. Mellomrom og tabulatortegn er ikke tillatt.
Attributter
Elementer kan ha attributter som en del av startkoden (eller som en del av start/slutt-koden i tomme elementer). Et attributt består av et attributtnavn etterfulgt av en attributtverdi i anførselstegn. Eksempel:
<elementnavn attributtnavn="attributtverdi">Innhold</elementnavn>Kommentarer
En kommentar består av tekst mellom tegnkombinasjonen <!-- og -->. Innholdet i kommentarer skal ignoreres av XML-behandlere. Du kan ikke bruke «--» i kommentarer, og du kan heller ikke sette inn kommentarer i kommentarer.
<!-- Dette er en kommentar. Tegn som for eksempel < og > kan brukes her. -->Behandlingsinstruksjoner
Behandlingsinstruksjoner består av tekst mellom tegnkombinasjonen <? og ?>. Behandlingsinstruksjoner leses kun av XML-behandlere og kan ikke innholde innhold. Synkaksen for behandlingsinstruksjoner er slik:
<?målinstruksjon?>Tegnreferanser
En regnreferanse er en måte å representere Unicode-tegn på i analyserte tegndata. Syntaksen for tegnreferanser er slik:
&#Unicodetegnverdi;Entitetsreferanser
Entitetsreferanse er et navn som representerer et bestemt tegn, en bestemt tekststreng eller fil. Entitetsreferanser i XML-dokumenter står alltid mellom et kommersielt og-tegn (&) og semikolon (;). Entitetsreferansen > står for eksempel for større-enn-tegn (<), som ikke kan brukes i XML-innhold annet enn som en entitetsreferanse.
Betydningen av alle entitetsreferanser som brukes i et XML-dokument, må defineres i dokumentets DTD, med unntak av følgende, forhåndsdefinerte entitetsreferanser for tegn. Disse kan brukes uten å måtte defineres:
Tegn | Entitetsreferanse |
< | < |
> | > |
& | & |
" | " |
' | ' |
Godt formulerte XML-dokumenter
For at et XML-dokument skal være godt formulert, må det følge visse regler:
Gyldig XML
Et gyldig XML-dokument er et godt formulert XML-dokument som følger DTD-en som er spesifisert i dokumentets DOCTYPE-deklarasjon.
I denne delen finner du et sammendrag av DTD-funksjoner og -konvensjoner i et oversiktlig format.
Deler i en DTD
En DTD kan bestå av følgende deler i vilkårlig rekkefølge:
Elementtype-deklarasjoner
Slik er syntaksen i en definisjon av elementtype:
<!ELEMENT elementnavn (elementinnhold)>Det skilles mellom store og små bokstaver i elementnavn. Det første tegnet i navnet på alle elementer må være en bokstav eller en understreking (_). Resten av tegnene i navnet kan bestå av bokstaver, understrekinger, tall, bindestreker og punktum. Mellomrom og tabulatortegn er ikke tillatt.
Elementinnhold kan bestå av analysert tegndata (dvs. tekst og entitetsreferanser uttrykt som ) og/eller andre elementtyper. Følgende ikoner kan settes inn etter et hvilket som helst elementnavn eller avsluttende parentes i definisjonen av elementinnholdet:
Ikon | Betydning |
None | Nøyaktig ett |
+ | Ett eller flere |
* | Null eller flere |
? | Null eller ett |
Hvis ett element skal følge et annet, bruker du komma:
<!ELEMENT elementnavn (element1, element2)>Når du skal angi at innholdet kan omfatte et element eller et annet, bruker du tegnet |:
<!ELEMENT elementnavn (element1 | element2)>Hvis et element skal kunne inneholde en kombinasjon av visse elementer og #PCDATA i vilkårlig rekkefølge, bruker du følgende syntaks:
<!ELEMENT elementnavn (#PCDATA | element1 | element2)*>Hvis et element skal kunne inneholde en vilkårlig kombinasjon av elementer og #PCDATA i vilkårlig rekkefølge, bruker du følgende syntakt (legg merke til at det ikke er brukt parenteser):
<!ELEMENT elementnavn ANY>Hvis du skal definere et tomt element, bruker du følgende syntaks (legg merke til at det ikke er brukt parenteser):
<!ELEMENT elementnavn EMPTY>Attributtdeklarasjoner
Slik er syntaksen for én enkelt attributtdefinisjon:
<!ATTLIST elementnavn attributtnavn attributtype standardverdi>Det skilles mellom store og små bokstaver i attributtnavn. Det første tegnet i navnet på alle attributter må være en bokstav eller en understreking (_). Resten av tegnene i navnet kan bestå av bokstaver, understrekinger, tall, bindestreker og punktum. Mellomrom og tabulatortegn er ikke tillatt.
Du kan bruke følgende attributtyper:
Attributtype | Betydning |
CDATA | Tegndata og entitetsreferanser i anførselstegn ("") |
ID | Må inneholde et unikt navn * for hvert element av denne typen |
IDREF | Det unike ID-navnet* på et element i XML-filen |
ENTITY | Navn på ikke-analysert, ekstern entitetsreferanse* som er definert i DTD-en |
ENTITIES | Liste med ENTITY-navn atskilt med mellomrom |
Enumerated | Liste med navn* i parentes, atskilt med tegnene | |
NMTOKEN | Verdi som bare inneholder NameChar-tegn** |
NMTOKENS | Liste med NMTOKEN atskilt med mellomrom |
NOTATION | Navn på en notasjon som er definert i DTD-en |
Enumerated NOTATION | Liste med NOTATION i parentes, atskilt med tegnene | |
*Det første tegnet i navnene må være en bokstav eller understreking (_). Resten av tegnene kan bestå av bokstaver, understrekinger, tall, bindestreker og punktum, men ikke mellomrom eller tabulatortegn.
**NameChar-tegn omfatter bokstaver, understrekinger, tall, bindestreker og punktum, men ikke mellomrom og tabulatortegn.
Standard attributtverdier kan være følgende:
Attributtype | Betydning |
Dette attributtet må spesifiseres av elementet | |
Bruk av dette attributtet er valgfritt | |
Hvis ikke spesifisert, må det være verdi; hvis spesifisert, antas dette attributtet å være verdi | |
standardverdi | Hvis ingenting er spesifisert, antas dette attributtet for å være standardverdi |
Kommentarer
Kommentarer består av tekst mellom tegnkombinasjonen <!-- og -->. Innholdet i kommentarer skal ignoseres av XML-behandlere. Du kan ikke bruke «--» i kommentarer, og heller ikke sette inn andre kommentarer.
<!-- Dette er en kommentar. Her kan du bruke tegnene < og > . -->Tegnreferanser
En regnreferanse er en måte å representere Unicode-tegn på i analyserte tegndata. Syntaksen for tegnreferanser er slik:
&#Unicodetegnverdi;Entitetsreferanse-deklarasjoner
Det finnes fem entitetstyper. Syntaksen i deklarasjonene for disse er slik:
Type | Syntaks |
Analysert intern | <!ENTITY entitetsnavn "tekst til entitet"> |
Analysert ekstern | <!ENTITY entitetsnavn SYSTEM "URL til fil"> ELLER <!ENTITY entitetsnavn PUBLIC "navn på fil" "URL til fil"> |
Uanalysert ekstern | <!ENTITY entitetsnavn SYSTEM "URL til fil" NDATA notasjonsnavn> ELLER <!ENTITY entitetsnavn PUBLIC "navn på fil" "URL til fil» NDATA notasjonsnavn> |
Intern parameter | <!ENTITY % entitetsnavn "tekst til entitet"> |
Ekstern parameter | <!ENTITY % entitetsnavn SYSTEM "URL til fil"> ELLER <!ENTITY % entitetsnavn PUBLIC "navn på fil" "URL til fil"> |
Syntaksen for de tre første entitetsreferansene er &entitetsnavn;. Syntaksen for en parameterentitet er %entitetsnavn;. Referanser for parameterentitet analyseres alltid og kan bare brukes i en DTD.
Notasjonsdeklarasjoner
Notasjonsdeklarasjoner spesifiseres på én av to måter:
<!NOTATION notasjonsnavn SYSTEM "Ekstern identifikator">Den eksterne identifikatoren bør være et navn på et program som kan behandle eller vise filer som denne notasjonen er brukt på. Eksempel:
<!NOTATION gif SYSTEM "Microsoft Internet Explorer">Vær oppmerksom på at det er opp til programmet som behandler XML-en, å formidle URL-en til programmet som er angitt av den eksterne identifikatoren.
Behandlingsinstruksjoner
Behandlingsinstruksjoner består av tekst mellom tegnkombinasjonen <? og ?>. Behandlingsinstruksjoner leses kun av XML-behandlere og kan ikke innholde innhold. Synkaksen for behandlingsinstruksjoner er slik:
<?målinstruksjon?>La oss si at du nettopp har eksportert en XML-fil fra avenue.quark. Når du ser påden i en tekstredigerer, finner du en liten «a» med aksent alle steder der du trodde du hadde satt inn ikonet for varemerke. Etter nærmere øyesyn, oppdager du at mange av spesialikonene faktisk er feil. Hva har skjedd?
Etter all sannsynlighet har du åpnet XML-filen i en tekstredigerer som ikke støtter omkodingen du har brukt i filen. Du kan lese mer om dette her.
Hva er omkoding?
Omkoding er bruk av en spesifikasjon som tilordner et sett med tegn til tilsvarende tallverdier. I ASCII blir for eksempel bokstaven «M» tilordnet tallverdien 77, «N» 78, «O» 79, og så videre.
Omkodingen i en tekstfil gjør det mulig for et program å oversette tekstfilen til faktiske tegn på skjermen. Uten omkoding blir filen bare gjengitt som en lang rekke tall. Hvis du så viser en tekstfil med feil omkoding, får du etter all sannsynlighet et uleselig resultat, fordi programmet du åpnet filen i, koder om tallverdiene til feil tegnsett.
Eksempler på omkodere:
Avenue.quark støtter UTF-8, UTF-16 og Shift-JIS.
Nedre og øvre tegnområde
I de fleste omkodingsspråk kan du dele kodene inn i to deler: de første 128 tegnene (nedre tegnområde), og deretter alle påfølgende tegn (øvre tegnområde).
Generelt sett blir kodene i det nedre tegnområdet tilordnet til de samme tegnene. Dette området omfatter tegnene az, AZ, 09, noen få skilletegn og enkelte spesielle kontrolltegn.
Det er tegnene i det øvre området som skaper flest problemer. Det nedre tegnområdet i MacRoman og Windows Latin 1 er nesten like. Derfor kan du som regel konvertere en fil med tegn bare fra det nedre området fra Mac OS til Windows, uten at det gjør noen forskjell. Hvis filen derimot inneholder tegn fra det øvre tegnområdet, kan resultatet bli mindre tilfredsstillende. Dette skyldes at mange av verdiene i det øvre området, er tilordnet ulike tegn på ulike plattformer. Et tegn som vises som ikonet for varemerke i Mac OS, vises kanskje som en «A» med hevet skrift i Windows.
Når tegnene ikke vises på riktig måte, er det fordi programmet som viser teksten, ikke kjenner til omkodingen for teksten, eller fordi det ikke er mulig å vise tekst med den aktuelle omkodingen i programmet du bruker.
Omkodingsspesifikasjon
Du kan velge omkoding for en XML-fil ved å ta med en omkodingsspesifikasjon i deklarasjonen i XML-filen, f.eks. på følgende måte:
<?xml version="1.0" standalone="yes" encoding="Shift_JIS"?>Hvis en XML-fil ikke har noen spesifikasjon for omkoding, antar avenue.quark at filen bruker UTF-8.
Når du lagrer en XML-fil i avenue.quark, velger du dokumentets omkoding via hurtigmenyen Omkoding, slik at avenue.quark automatisk lager riktig omkodingsattributt.
Omkoding og DTD-er
Med XML kan du velge omkoding for en XML-fil. XML kan imidlertid ikke spesifisere omkoding for en frittstående DTD-fil.
Dette kan heldigvis avenue.quark gjøre. Når du skal spesifiere omkoding for en frittstående DTD, legger du bare til følgende som første linje i filen:
<? xml encoding="encodingName" ?>Hvis du for eksempel skal spesifisere at en frittstående DTD bruker UTF-16, legger du til følgende linje helt i begynnelsen av filen:
<? xml encoding="UTF-16" ?>